#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#define bug printf("bug\n");
#define _clr(x,a) memset(x,a,sizeof(x));
using namespace std;
const int N=100050;
int n;
int ans;
//离散化后的坐标
int x[N<<1];
//原始端点坐标
struct Node{
    int l;
    int r;
}t[N];
int vis[N<<2];
int has[N<<2];
//标记下传
void pushdown(int rt){
    //染色问题直接将子节点染成和父节点一样的颜色
    vis[rt<<1]=vis[rt<<1|1]=vis[rt];
    //清空标记
    vis[rt]=-1;
}
//染色区间左端点 染色区间右端点 颜色标号 根节点左端点 根节点右端点 根节点编号
void update(int L,int R,int c,int l,int r,int rt){
    //染色区间大于根节点
    if(L<=l && R>=r){
        vis[rt]=c;
        return;
    }
    if(vis[rt]!=-1){
        pushdown(rt);
    }
    int m=(l+r)>>1;
    if(L<=m){
        update(L,R,c,l,m,rt<<1);
    }
    if(R>m){
        update(L,R,c,m+1,r,rt<<1|1);
    }
}
void query(int l,int r,int rt){

    if(vis[rt]!=-1){
        if(!has[vis[rt]]){
            ans++;
        }
        has[vis[rt]]=1;
        return;
    }
    //因为是段的线段树 离散化后3 3这个区间是没有意义的 直接返回
    //如果是点的线段树 3 3就表示3这个点
    if(l==r){
        return;
    }
    int m=(l+r)>>1;
    query(l,m,rt<<1);
    query(m+1,r,rt<<1|1);
}
int main(void){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        int k=0;
        for(int i=0;i<n;i++){
            scanf("%d%d",&t[i].l,&t[i].r);
            x[k++]=t[i].l;
            x[k++]=t[i].r;
        }
        sort(x,x+k);
        //去重
        int m=1;
        for(int i=1;i<k;i++){
            if(x[i]!=x[i-1]){
                x[m++]=x[i];
            }
        }
        //处理段的离散化的一个问题
        //比如1-10 1-4 5-10 离散化之后是1-4 1-2 3-4 看起来第二和第三段会覆盖第一段，但实际上不是
        for(int i=m-1;i>=1;i--){
            if(x[i]!=x[i-1]+1){
                x[m++]=x[i-1]+1;
            }
        }
        sort(x,x+m);
        _clr(vis,-1);
        //二分找到离散化后的坐标
        for(int i=0;i<n;i++){
            int l=lower_bound(x,x+m,t[i].l)-x;
            int r=lower_bound(x,x+m,t[i].r)-x;
            update(l,r,i,0,m,1);
        }
        _clr(has,0);
        ans=0;
        //整个区间查询
        query(0,m,1);
        printf("%d\n",ans);
    }
    return 0;
}